#ifndef LINKEDLIST_H
#define LINKEDLIST_H

#include <iostream>

using namespace std;

struct ListNode
{
	int val;
	ListNode *next;
	ListNode(int x) : val(x), next(NULL) {}
};

ListNode *createLinkedList(int arr[], int n)
{
	if (n == 0)
		return NULL;
	ListNode *head = new ListNode(arr[0]);
	ListNode *curNode = head;
	for (int i = 1; i < n; ++i)
	{
		curNode->next = new ListNode(arr[i]);
		curNode = curNode->next;
	}
	return head;
}

void printLinkedList(ListNode *head)
{
	ListNode *curNode = head;
	while (curNode != NULL)
	{
		cout << curNode->val << "->";
		curNode = curNode->next;
	}
	cout << "NULL" << endl;
	return;
}

void deleteLinkedList(ListNode *head)
{
	ListNode *curNode = head;
	while (curNode != NULL)
	{
		ListNode *delNode = curNode;
		curNode = curNode->next;
		delete delNode;
	}
	cout << "Memory release end." << endl;
	return;
}

// #include <iostream>
// using namespace std;

// class Solution {
// public:
// 	ListNode* removeElements(ListNode* head, int val) {
// 		return head;
// 	}
// };

// int main(int argc, char const *argv[]) {
// 	int arr[] = { 1, 2, 6, 3, 4, 5, 6 };
// 	int n = sizeof(arr) / sizeof(arr[0]);
// 	ListNode* list = createLinkedList( arr, n );
// 	int val = 0;
// 	printLinkedList( list );
// 	list = Solution().removeElements( list, val );
// 	printLinkedList( list );
// 	deleteLinkedList( list );
// 	return 0;
// }

#endif